# xiu.py (修正版)

# # 1. 从您的主应用文件和模型文件中导入必要的对象
# from app import app
# from models import db, Application

# print("脚本开始执行...")

# # 2. 使用 'with app.app_context():' 来创建一个应用上下文
# with app.app_context():
#     # 3. 将您所有的数据库操作代码，都放在这个 'with' 代码块内部
    
#     print("已进入应用上下文，开始查询数据库...")
    
#     # 尝试通过用户名查找申请记录
#     application_to_fix = Application.query.filter_by(username='TH0038').first()

#     if application_to_fix:
#         print(f"成功找到申请记录: ID={application_to_fix.id}, 姓名={application_to_fix.name}, 旧用户名={application_to_fix.username}")
        
#         # 进行修改
#         application_to_fix.username = 'TY001'
#         db.session.commit() # 提交更改到数据库
        
#         print(f"成功！用户名已从 'TH0038' 修改为 'TY001'。")
#     else:
#         print("错误：未找到用户名为 'TH0038' 的申请记录。")

# print("脚本执行完毕。")

# force_approve.py - 根据学号跳过审批，直接开通学生账户的脚本

# 1. 导入所有必要的模块和对象
from app import app, _provision_ldap_account
from models import db, Application, ApplicationStatus, UserType

# --- 在这里配置您要直接批准的学号列表 ---
STUDENT_IDS_TO_APPROVE = [
    # 'SA25229123',
    'SA25229112'
]
# -----------------------------------------

print("--- 开始执行强制批准脚本 ---")

# 2. 手动创建应用上下文，以便访问数据库和应用功能
with app.app_context():
    
    print("已进入应用上下文，准备处理...")
    
    # 3. 遍历学号列表，逐一处理
    for student_id in STUDENT_IDS_TO_APPROVE:
        print(f"\n--- 正在处理学号: {student_id} ---")
        
        # 4. 根据学号查找待审核的学生申请
        application = Application.query.filter_by(
            student_id=student_id,
            user_type=UserType.STUDENT,
            status=ApplicationStatus.PENDING
        ).first()

        # 5. 检查申请是否存在且状态正确
        if not application:
            print(f"  [失败] 未找到学号为 '{student_id}' 的待审核申请记录。")
            continue # 跳过当前学号，处理下一个
        
        print(f"  [成功] 找到了申请记录: 用户名='{application.username}', 姓名='{application.name}'")

        # 6. 调用核心函数开通账户
        try:
            success, data = _provision_ldap_account(
                username=application.username,
                full_name=application.name,
                email=application.email,
                supervisor_name=application.supervisor_name,
                password=None,  # 传递None，让核心函数为学生生成随机密码
                user_type=UserType.STUDENT
            )

            if success:
                # 7. 如果开通成功，更新数据库中的申请状态
                application.status = ApplicationStatus.APPROVED
                db.session.commit()
                print(f"  [成功] 账户 '{application.username}' 已成功开通，并已更新数据库状态。")
            else:
                print(f"  [失败] 调用核心开通函数失败: {data}")

        except Exception as e:
            print(f"  [严重失败] 处理过程中发生意外错误: {e}")
            db.session.rollback() # 发生错误时回滚数据库

print("\n--- 脚本执行完毕 ---")